home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / cvt14.zip / HELP.TXT < prev    next >
Text File  |  1993-01-04  |  31KB  |  657 lines

  1. This is HELP.TXT, the help file for CONVERT vers. 1.4
  2. (C) 1988 Rodger L. Ellis.  All rights reserved.
  3.  
  4. Note 1:  Text surrounded by braces ("{" and "}") is highlighted text.
  5.  
  6. Note 2:  Lines beginning with "|" are used only by the public (demo) version
  7.          of CONVERT.  Such lines are not presented when help is called for in
  8.          the proprietary (full-featured) version.
  9.  
  10. :WELCOME TO CONVERT
  11.  
  12.   Greetings from {Rodger L. Ellis}, the author of CONVERT....
  13.  
  14. | This is the public version of CONVERT.  It offers all features of the
  15. | proprietary version of CONVERT with one limitation:  record size is
  16. | limited to 64 bytes (the proprietary version can handle record sizes
  17. | up to 16k bytes -- see Section 13, below, for info on how to obtain
  18. | the proprietary version of CONVERT).  This public version of CONVERT
  19. | may be freely distributed.
  20. |
  21.   This text contains the following subjects:
  22.     1.  Disclaimer
  23.     2.  General Description
  24.     3.  Background
  25.     4.  What CONVERT Can Do
  26.     5.  What CONVERT Cannot Do
  27.     6.  Operation
  28.     7.  The LOAD and SAVE Functions
  29.     8.  The DIRECTORY Command
  30.     9.  Automatic Operation
  31.    10.  Reindexing Index Files
  32.    11.  Sourcecode Availability
  33.    12.  Feedback to the Author
  34. |  13.  Obtaining the Proprietary Version of CONVERT
  35.  
  36.  
  37.   {1.  Disclaimer}
  38.  
  39.   The author makes no warranties as to the content of the CONVERT program
  40.   and specifically disclaims any implied warranties of merchantability or
  41.   fitness for any particular purpose.  By your use of this program, you
  42.   agree to hold the author harmless for any losses due to the use of the
  43.   CONVERT program or its documentation.
  44.  
  45.  
  46.   {2.  General Description}
  47.  
  48.   CONVERT is a utility which converts Borland's TAccess data files from one
  49.   format to another.  TAccess files are files that have been created using
  50.   Borland's Turbo Pascal Database Toolbox.
  51.  
  52.   CONVERT can convert TAccess version 1.xx files into TAccess version 4.xx
  53.   files and vice versa.  CONVERT can also convert a TAccess data file to a
  54.   new TAccess data file of a different structure, with automatic conversion
  55.   of data type when the source and destination records contain like field
  56.   names but different data structures.
  57.  
  58.  
  59.   {3.  Background}
  60.  
  61.   Over the past several years, we have created a multitude of specialized
  62.   database programs for clients using various versions of Borland's data-
  63.   base toolboxes.  As those programs evolved, new data structures were
  64.   required.  We spent a considerable amount of time writing custom
  65.   utilities that would convert the clients' old data files into formats
  66.   required by the new software.  Now, with the advent of Turbo Pascal 4.0,
  67.   we find that even more conversions are needed.  Gimme a break!  Wouldn't
  68.   it be easier to write a general-purpose program that could handle all
  69.   file conversions?  Well, it wasn't necessarily easier, but we did it.
  70.   It's called CONVERT.
  71.  
  72.  
  73.   {4.  What CONVERT Can Do}
  74.  
  75.   The best way to illustrate what CONVERT can do is to provide a few
  76.   examples.  Here goes....
  77.  
  78.   Example 1:
  79.     You have upgraded a client's program from TAccess 1.xx to TAccess 4.xx,
  80.     and now the client's data files need to be converted.  Run CONVERT to
  81.     upgrade the client's data files.
  82.  
  83.   Example 2:
  84.     Your client has requested that you increase the length of the ZIPcode
  85.     field from 5 to 9 characters.  Changing the software is no problem,
  86.     but how do you convert the client's existing data file?  Simple --
  87.     just run CONVERT.
  88.  
  89.   Example 3:
  90.     The program you created for a client involves a data file that contains
  91.     a string variable that actually represents a number.  You thought that
  92.     keeping this value as a string in the database would be the best way
  93.     to handle things.  Now, as you see that your program enhancements rely
  94.     heavily upon that variable, you wish it had been defined as a real
  95.     rather than a string.  Changing the software is no problem, but what
  96.     about the client's existing data file?  Simple -- just run CONVERT and
  97.     redefine the data type.
  98.  
  99.   Example 4:
  100.     Your client has weeded his garden and now has zillions of unused
  101.     records in his datafile.  He was hoping to free up a couple megabytes
  102.     on his hard disk in the process, but was surprised when the size of
  103.     his datafile remained unchanged.  You explain how record deletions
  104.     work in TAccess.  Then you break out the secret weapon -- CONVERT --
  105.     and perform a "conversion" with identical source and destination
  106.     record definitions.  Since CONVERT ignores deleted records, the
  107.     resulting destination file will be nice and compact.
  108.  
  109.  
  110.   {5.  What CONVERT Cannot Do}
  111.  
  112.   CONVERT cannot convert index files.  No biggie, though, because if you
  113.   have done a thorough job in creating your TAccess application, the program
  114.   will be able to create its own index files from the new data file.  Read
  115.   more on the subject of indexing in Section 10.
  116.  
  117.  
  118.   {6.  Operation}
  119.  
  120.   The basic operation of CONVERT is a 6-step process:
  121.  
  122.     1.  Press F3 and enter the source filename and database version.
  123.     2.  Press F4 and enter the destination filename and database version.
  124.     3.  Press F5 and enter the source file's record details.
  125.     4.  Press F6 and enter the destination file's record details.
  126.     5.  Hit ESC to return to the main menu.
  127.     6.  Select "Convert" to perform the conversion.
  128.  
  129.  
  130.   {7.  The LOAD and SAVE Functions}
  131.  
  132.   Once the source and destination records have been defined, the definitions
  133.   can be saved to a .CNV file by using the SAVE command.  The definitions
  134.   can be retrieved later by using the LOAD command.
  135.  
  136.   When the LOAD command is invoked, the program will display a pick list of
  137.   all .CNV files.  If you pick one of the files in the list, the program
  138.   will load the source and destination files' details.
  139.  
  140.  
  141.   {8.  The DIRECTORY Command}
  142.  
  143.   The Directory command provides a scrollable directory display of the
  144.   specified path.  It has no particular significance to CONVERT per se,
  145.   but simply provides a way to view directories without having to return
  146.   to DOS.
  147.  
  148.  
  149.   {9.  Automatic Operation}
  150.  
  151.   CONVERT performs automatically when a .CNV file is specified as a
  152.   parameter in the invoking DOS command line.  For example, if you enter
  153.   CONVERT FOOBAR at the C> prompt, CONVERT will automatically load
  154.   FOOBAR.CNV, perform the file conversion, and exit back to DOS.
  155.  
  156.   Of course, in order for this to work, you must have already created the
  157.   file FOOBAR.CNV by the SAVE command, and the source file specified in
  158.   FOOBAR.CNV must be present in the current subdirectory.
  159.  
  160.   The value in having this automatic capability isn't so much for your own
  161.   convenience but that of your clients who use your database applications.
  162.   When the need arises to modify the structure of their database, you can
  163.   prepare an update disk which not only contains the latest version of the
  164.   application, but which also contains the mechanism to move their existing
  165.   data into the new structure.  Let's look at an example.
  166.  
  167.   Suppose you have created a simple TAccess database program for a client.
  168.   The data file record contains a string[5] field called ZIP.  After
  169.   several months of operation, the client tells you that he needs the ZIP
  170.   field expanded to handle 9-digit ZIP codes.  You know that modifying the
  171.   sourcecode is a very minor issue -- one that you can handle in a matter
  172.   of a few minutes.  You also know that those 2000 records the client has
  173.   already keyed in represent a considerable expenditure of time on his
  174.   part, and he doesn't EVEN want to hear that he has to key all his data
  175.   in AGAIN.  He doesn't need to, of course, because you have CONVERT.
  176.  
  177.   You create an update disk and send it to the client.  He mounts the disk
  178.   in the A: drive and runs UPDATE.BAT (or some such).  When the smoke
  179.   clears, he has your new program version on his hard disk and his data
  180.   file is in the new format.  UPDATE.BAT might look like this:
  181.  
  182.     COPY NEWPROG.EXE C:\DATABASE     (copy your new program version to
  183.                                      the applicable subdirectory on his
  184.                                      hard disk)
  185.     C:                               (go to drive C:)
  186.     CD \DATABASE                     (go to the correct subdirectory)
  187.     REN DATAFILE.DAT DATAFILE.OLD    (rename his old data file to match
  188.                                      the source filename you specified in
  189.                                      FOOBAR.CNV; you had already specified
  190.                                      DATAFILE.DAT as the destination
  191.                                      filename in FOOBAR.CNV);
  192.     A:CONVERT A:FOOBAR               (perform the conversion)
  193.     DEL DATAFILE.NDX                 (delete existing index file(s) -- see
  194.                                      below for the rationale behind this)
  195.  
  196.   In actual practice, you would probably want to provide some backup
  197.   entries in the UPDATE.BAT file to preserve existing conditions.
  198.  
  199.  
  200.   {10.  Reindexing Index Files}
  201.  
  202.   As I indicated previously, CONVERT is not designed to provide any
  203.   index file conversions.  There is really no need to do so, since any
  204.   TAccess application worth its salt would have a reindex, or "repair"
  205.   capability.  Building a procedure to reindex a datafile is not
  206.   difficult; an example is given in each of Borland's Database Toolbox
  207.   manuals.
  208.  
  209.   While reindexing is no big deal, a potential problem exists.  If you
  210.   create TAccess database applications according to Borland's examples,
  211.   your application will open the appropriate data file upon startup and,
  212.   finding it, will open the appropriate index files.  If the index files
  213.   are in place, normal operation would ensue.  However, you can't keep the
  214.   old index files after you alter the data file because then everything
  215.   would be out of sync.  On the other hand, if you delete the old index
  216.   files, your application will create all new files -- overwriting the new
  217.   data file you just created with CONVERT!
  218.  
  219.   The solution is to provide for future changes in the data file structure
  220.   up front by writing your initialization code to look for the data file
  221.   and, having done that, look for the index files.  If the data file is
  222.   present but the index files are not, then create new index files using
  223.   your reindex procedures.  Compare the following examples:
  224.  
  225.   Original sourcecode (no conversion flexibility):
  226.  
  227.     OpenFile(DataF,'DATA.DAT',100);
  228.     if OK then OpenIndex(DataX,'DATA.NDX',10,0);
  229.     if not OK then
  230.       MakeFile(DataF,'DATA.DAT',100);
  231.       MakeIndex(DataX,'DATA.NDX',10,0);
  232.     end;
  233.  
  234.   Recommended sourcecode (full conversion flexibility):
  235.  
  236.     OpenFile(DataF,'DATA.DAT',100);
  237.     if OK then
  238.     begin
  239.       OpenIndex(DataX,'DATA.NDX',10,0);
  240.       if not OK then Reindex(DataF);   {Reindex should set OK=true if the}
  241.     end;                               {..reindexing was successful}
  242.     if not OK then
  243.     begin
  244.       MakeFile(DataF,'DATA.DAT',100);
  245.       MakeIndex(DataX,'DATA.NDX',10,0);
  246.     end;
  247.  
  248.   The second example will let you replace an old data file with one of a
  249.   new structure using CONVERT, delete the existing index files, and
  250.   automatically rebuild the index files the next time the application is
  251.   run.
  252.  
  253.  
  254.   {11.  Sourcecode Availability}
  255.  
  256.   Sourcecode for CONVERT is available for $99.  You will receive a 360k
  257.   disk containing ALL sourcecode for ALL units, functions and procedures
  258.   used in CONVERT, including
  259.  
  260.     {highlighted menu selection system}
  261.     {scrolling directory}
  262.     {scrolling PICK file selection system}
  263.     {scrolling HELP system}
  264.     {data type conversion schemes}
  265.     {window management}
  266.  
  267.   When you purchase the sourcecode, you may freely extract any portions to
  268.   include in your own programs.  While you may sell or give away such
  269.   programs without payment of royalty, no portion of the sourcecode itself
  270.   may be sold, uploaded to BBS's, or otherwise given to another party
  271.   without the express written authorization of Rodger L. Ellis.
  272.  
  273.   To order, send a check or money order to
  274.  
  275.     Rodger L. Ellis
  276.     740 W. 71st Avenue
  277.     Anchorage, AK 99518
  278.  
  279.   Please indicate that you wish to receive "CONVERT Sourcecode".
  280.   Phone orders are welcome.  Call (907) 349-6882.  VISA/MC accepted.
  281.  
  282.  
  283.   {12.  Feedback to the Author}
  284.  
  285.   The author would appreciate feedback on this program.  Send comments to:
  286.      Author:          Rodger L. Ellis
  287.      CIS address:     75216,3223
  288.      GEnie address:   CT
  289.      Mail address:    740 W. 71st Avenue, Anchorage, AK 99518 USA
  290.      Voice Phone:     (907) 349-6882
  291.      Modem Phone:     (907) 349-7996
  292.  
  293. |
  294. | {13.  Obtaining the Proprietary Version of CONVERT}
  295. |
  296. | The proprietary version of CONVERT is available for $49 postpaid.  The
  297. | product performs the same functions as the public version, except that
  298. | the maximum record size is 16384 bytes rather than 64 bytes.  If you
  299. | think about how much time you would spend writing a conversion utility
  300. | co cope with database changes, you could probably justify the expense
  301. | in just one program rewrite.  Use CONVERT twice, and you're money
  302. | ahead!
  303. |
  304. | To order, send a check or money order to
  305. |
  306. |   Rodger L. Ellis
  307. |   740 W. 71st Avenue
  308. |   Anchorage, AK 99518
  309. |
  310. | Please indicate that you wish to receive "CONVERT".
  311. | Phone orders are welcome.  Call (907) 349-6882.  VISA/MC accepted.
  312.                                                                         (end)
  313. :SOURCE FILE
  314.  
  315.   The {source file} is the file that you wish to convert.  It must be a
  316.   Turbo Access data file that was created with Borland's Database Toolbox
  317.   version 1.xx or 4.xx, and it must contain at least one data record (in
  318.   addition to the header record).
  319.  
  320.   First, enter the filename of the source file.
  321.  
  322.   Next, select the version by either tapping the spacebar or by entering the
  323.   number 1 or 4.
  324.  
  325.   Exit the SOURCE FILE window to the Main Menu by pressing ESC, or go
  326.   directly to another window by pressing the F4, F5 or F6 function key.
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.                                                                         (end)
  335. :DESTINATION FILE
  336.  
  337.   The {destination file} is the new file that will be created when you perform
  338.   the conversion.  It will be a Turbo Access data file suitable for use with
  339.   Borland's Database Toolbox version 1.xx or 4.xx, depending upon which
  340.   version you have specified in the DESTINATION FILE window.
  341.  
  342.   First, enter the filename of the destination file.  The filename must be
  343.   different than the source file's filename, since both files will be open
  344.   simultaneously.
  345.  
  346.   Next, select the version by either tapping the spacebar or by entering the
  347.   number 1 or 4.
  348.  
  349.   Exit the DESTINATION FILE window to the Main Menu by pressing ESC, or go
  350.   directly to another window by pressing the F3, F5 or F6 function key.
  351.  
  352.  
  353.  
  354.  
  355.  
  356.                                                                         (end)
  357. :DATA RECORDS
  358.  
  359.   The DATA RECORD windows are used to define the names and data types
  360.   of the variables that make up the data record of the source and
  361.   destination files.
  362.  
  363.   This text contains the following subjects:
  364.     1.  Editing
  365.     2.  Variable Names
  366.     3.  Data Type
  367.     4.  Conversion Between Different Data Types
  368.  
  369.  
  370.   {1.  Editing}
  371.  
  372.   Use ^N (Ctrl-N) and ^Y (Ctrl-Y) in WordStar fashion to insert and delete
  373.   lines in the source data record list.
  374.  
  375.  
  376.   {2.  Variable Names}
  377.  
  378.   A variable name is simply a label of up to 20 characters.  It cannot
  379.   contain spaces, and case is not significant.  While it promotes clarity
  380.   to use the same variable names that were used in defining the database
  381.   record in the original sourcecode, there is no requirement to do so as far
  382.   as the CONVERT program is concerned.  The significance of the variable name
  383.   is that it is used by CONVERT to check for like variable names in the
  384.   source and destination data records.  If a match is found, data is
  385.   converted according to the conversion rules specified below.  If no match
  386.   is found, that part of the source data record is ignored.
  387.  
  388.  
  389.   {3.  Data Type}
  390.  
  391.   Each variable must be assigned a data type.  You select the data type by
  392.   tapping the spacebar until you see the one you want.  The following data
  393.   types are possible:
  394.  
  395.      boolean     byte        char        integer     longint     real
  396.      shortint    string[]    word        ChrArr[]    Rec[]
  397.  
  398.   All are standard Turbo Pascal data types except ChrArr[] and Rec[].
  399.  
  400.   The {ChrArr[]} data type is a character array of 1 to 256 elements.
  401.   It is used by some programmers in place of the string type because it
  402.   provides the same information while consuming one less byte in the data
  403.   record.  Compare the hex representations of string[10] with ChrArr[10]:
  404.  
  405.     string[10] (11 bytes):
  406.        0A 54 45 53 54 00 00 00 00 00 00      .TEST......
  407.  
  408.     ChrArr[10] (10 bytes):
  409.        54 45 53 54 20 20 20 20 20 20         TEST
  410.  
  411.   Note that the ChrArr is padded with the space character.
  412.  
  413.   A {Rec[]} is a blanket definition of a given number of bytes, the
  414.   contents of which are unimportant to the CONVERT program.  It is used to
  415.   cover situations where you have a record defined within the database
  416.   record, as in the following example:
  417.  
  418.   =========================================================================
  419.        Sourcecode Data Record                  CONVERT Source Data Record
  420.   ---------------------------------           -----------------------------
  421.   record                                      Status            longint
  422.     Status  : longint;                        LName             string[20 ]
  423.     LName   : string[20];                     FName             string[12 ]
  424.     FName   : string[12];                     Dollars           Rec[16   ]
  425.     Dollars : record
  426.                 Current : longint;
  427.                 Days30  : longint;
  428.                 Days60  : longint;
  429.                 Days90  : longint;
  430.               end;
  431.   end;
  432.   =========================================================================
  433.  
  434.   The next example of Rec[] usage shows how to handle data records that
  435.   contain arrays:
  436.  
  437.   =========================================================================
  438.        Sourcecode Data Record                  CONVERT Source Data Record
  439.   ---------------------------------------     -----------------------------
  440.   record                                      Status            longint
  441.     Status  : longint;                        LName             string[20 ]
  442.     LName   : string[20];                     FName             string[12 ]
  443.     FName   : string[12];                     Remarks           Rec[810  ]
  444.     Remarks : array[1..10] of string[80];
  445.   end;
  446.   =========================================================================
  447.  
  448.   Finally, this example shows how the Rec[] data type can be used just for
  449.   convenience:
  450.  
  451.   =========================================================================
  452.        Sourcecode Data Record                  CONVERT Source Data Record
  453.   ---------------------------------------     -----------------------------
  454.   record                                      Status            integer
  455.     Status  : integer;                        Misc              Rec[99   ]
  456.     LName   : string[20];
  457.     FName   : string[12];
  458.     Addr    : string[30];
  459.     City    : string[20];
  460.     State   : string[2];
  461.     ZIP     : string[9];
  462.   end;
  463.   =========================================================================
  464.  
  465.   We might use the above example to perform a straightforward data file
  466.   conversion from TAccess vers. 1.xx format to 4.xx format.  In that case,
  467.   the only variable we need to individually define is Status because Status
  468.   will be redefined as a longint in the destination data record.  Then,
  469.   when we perform the conversion process, the content of the Status field
  470.   will be rewritten as a longint and the remainder of the source data record
  471.   will be written as an intact block of 99 bytes.  To accomplish this, the
  472.   source and destination data records would be defined as follows:
  473.  
  474.   =========================================================================
  475.        Source Data Record                  Destination Data Record
  476.   ----------------------------           -----------------------------
  477.   Status            integer              Status              longint
  478.   Misc              Rec[99   ]           Misc                Rec[99   ]
  479.   =========================================================================
  480.  
  481.  
  482.   {4.  Conversion Between Different Data Types}
  483.  
  484.   One of the most powerful features of CONVERT is its ability to provide
  485.   automatic conversion between different data types.
  486.  
  487.   The most common use of this feature is in converting TAccess version 1.xx
  488.   data files to version 4.xx format, as was the case in the previous example.
  489.   There, the integer Status field in the source file was converted to a
  490.   longint Status field in the destination file.
  491.  
  492.   Conversion between different data types is {automatic} when the source and
  493.   destination data record definitions contain the {same variable name} but
  494.   {different data types}.
  495.  
  496.   Just about every conceivable data conversion can be accomplished.  The
  497.   following chart shows what happens when you define different data types
  498.   for like variable names in the source and destination data records.  Note
  499.   that the special data type Rec[] is a straightforward, 1-for-1 conversion
  500.   and cannot be used to convert from or to other data types.  Conversions
  501.   marked with a {*} are not feasible; they always produce a zero result.
  502.  
  503.   =========================================================================
  504.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  505.   ---------   -----------    ----------------------------------------------
  506.   boolean     byte           0 if false, 1 if true
  507.   boolean     char           'F' if false, 'T' if true
  508.   boolean     ChrArr         'FALSE' if false, 'TRUE' if true
  509.   boolean     integer        0 if false, 1 if true
  510.   boolean     longint        0 if false, 1 if true
  511.   boolean     real         * always 0.0
  512.   boolean     shortint       0 if false, 1 if true
  513.   boolean     string         'FALSE' if false, 'TRUE' if true
  514.   boolean     word           0 if false, 1 if true
  515.  
  516.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  517.   ---------   -----------    ----------------------------------------------
  518.   byte        boolean        false if byte=0, otherwise true
  519.   byte        char           Chr(byte)
  520.   byte        ChrArr         value converted to numeric characters if room
  521.   byte        integer        value converted to integer format
  522.   byte        longint        value converted to longint format
  523.   byte        real           value converted to real format
  524.   byte        shortint       value converted to shortint format;
  525.                              if byte is > 127, the shortint is 127
  526.   byte        string         value converted to numeric string if room
  527.   byte        word           value converted to word format
  528.  
  529.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  530.   ---------   -----------    ----------------------------------------------
  531.   char        boolean        false if char in ['0','F','f'], otherwise true
  532.   char        byte           Ord(char)
  533.   char        ChrArr         first element contains char, padded w/ spaces
  534.   char        integer        lo byte contains Ord(char), hi byte = 0
  535.   char        longint        first byte contains Ord(char), others = 0
  536.   char        real         * always 0.0
  537.   char        shortint       Ord(char) if char <= 127, otherwise 0
  538.   char        string         string of length 1 containing char
  539.   char        word           lo byte contains Ord(char), hi byte = 0
  540.  
  541.  
  542.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  543.   ---------   -----------    ----------------------------------------------
  544.   integer     boolean        false if integer = 0, otherwise true
  545.   integer     byte           value converted to byte format;
  546.                              if integer is < 0, the byte is 0;
  547.                              if integer is > 255, the byte is 255
  548.   integer     char         * always a NUL character
  549.   integer     ChrArr         value converted to numeric characters if room
  550.   integer     longint        value converted to longint format
  551.   integer     real           value converted to real format
  552.   integer     shortint       value converted to shortint format;
  553.                              if integer is < -128, the shortint is -128;
  554.                              if integer is > 127, the shortint is 127
  555.   integer     string         value converted to numeric string if room
  556.   integer     word           value converted to word format;
  557.                              if integer is < 0, word is 0
  558.  
  559.  
  560.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  561.   ---------   -----------    ----------------------------------------------
  562.   longint     boolean        false if longint = 0, otherwise true
  563.   longint     byte           value converted to byte format;
  564.                              if longint < 0, the byte is 0;
  565.                              if longint > 255, the byte is 255
  566.   longint     char         * always a NUL character
  567.   longint     ChrArr         value converted to numeric characters if room
  568.   longint     integer        value converted to integer format;
  569.                              if longint is < -32768, the integer is -32768;
  570.                              if longint is > 32767, the integer is 32767
  571.   longint     real           value converted to real format
  572.   longint     shortint       value converted to shortint format;
  573.                              if longint is < -128, the shortint is -128;
  574.                              if longint is > 127, the shortint is 127
  575.   longint     string         value converted to numeric string if room
  576.   longint     word           value converted to word format;
  577.                              if longint is < 0, the word is 0;
  578.                              if longint is > 65535, the word is 65535
  579.  
  580.  
  581.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  582.   ---------   -----------    ----------------------------------------------
  583.   real        boolean        false if real = 0.0, otherwise true
  584.   real        byte           value converted to real format
  585.   real        char         * always a NUL character
  586.   real        ChrArr         value converted to numeric characters if room
  587.   real        integer        value rounded to an integer;
  588.                              if real is < -32768.0, the integer is -32768;
  589.                              if real is > 32767, the integer is 32767
  590.   real        longint        value rounded to a longint;
  591.                              if real is < -2147483647.0, the longint is
  592.                              -2147483647;
  593.                              if real is > 2147483647, the longint is
  594.                              2147483647
  595.   real        shortint       value rounded to a shortint;
  596.                              if real is < -128, the shortint is -128;
  597.                              if real is > 127, the shortint is 127
  598.   real        string         value converted to scientific notation if room
  599.   real        word           value rounded to a word;
  600.                              if real is < 0, the word is 0;
  601.                              if real is > 65535, the word is 65535
  602.  
  603.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  604.   ---------   -----------    ----------------------------------------------
  605.   shortint    boolean        false if shortint = 0, otherwise true
  606.   shortint    byte           value converted to byte format;
  607.                              if shortint < 0, the byte is 0
  608.   shortint    char         * always a NUL character
  609.   shortint    ChrArr         value converted to numeric characters if room
  610.   shortint    integer        value converted to integer format
  611.   shortint    longint        value converted to longint format
  612.   shortint    real           value converted to real format
  613.   shortint    string         value converted to numeric string if room
  614.   shortint    word           value converted to word format;
  615.                              if shortint is < 0, the word is 0
  616.  
  617.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  618.   ---------   -----------    ----------------------------------------------
  619.   string      boolean        true if string = 'TRUE', otherwise false
  620.   string      byte           if string is between '0' and '255', byte takes
  621.                              on string's value; otherwise 0
  622.   string      char           char = first character in string; if string
  623.                              length is 0, char is NUL character
  624.   string      ChrArr         a character array, truncated or padded with
  625.                              spaces as necessary
  626.   string      integer        if string is a numeric between '-32768' and
  627.                              '32767', integer takes on string's value;
  628.                              otherwise 0
  629.   string      longint        if string is a numeric between '-2147483647'
  630.                              and '2147483647', longint takes on string's
  631.                              value; otherwise 0
  632.   string      real           if a numeric string, real takes on value;
  633.                              otherwise 0.0
  634.   string      shortint       if string is a numeric between '-128' and
  635.                              '127', shortint takes on string's value;
  636.                              otherwise 0
  637.   string      word           if string is between '0' and '65535', word
  638.                              takes on string's value; otherwise 0
  639.  
  640.  
  641.    SOURCE     DESTINATION    RESULTANT ENTRY IN THE DESTINATION DATA FILE
  642.   ---------   -----------    ----------------------------------------------
  643.   word        boolean        false if word = 0, otherwise true
  644.   word        byte           value converted to byte format;
  645.                              if word > 255 then byte = 255
  646.   word        char         * always a NUL character
  647.   word        ChrArr         value converted to numeric characters if room
  648.   word        integer        value converted to integer format;
  649.                              if word > 32767 then integer = 32767
  650.   word        longint        value converted to longint format
  651.   word        real           value converted to real format
  652.   word        shortint       value converted to shortint format;
  653.                              if word > 127 then shortint = 127
  654.   word        string         value converted to numeric string if room
  655.  
  656.                                                                        (end)
  657.